package GPSChallenge;

import GPSChallenge.movimiento.Posicion;

public class LimitesDelMapa {
	
	// Hecho en singleton para que Ciudad establezca los limites y para que Posicion no lo agregue cada vez que lo usa al validar.
	
	private Posicion extremoInferiorDerecho;

    static private LimitesDelMapa instanciaUnica = null;
    
    static public LimitesDelMapa obtenerInstancia() {
    	
            if (instanciaUnica == null) {
            	
            	    instanciaUnica = new LimitesDelMapa();
            }
            return instanciaUnica;
    }
    
    public void establecerLimites(int tamanio) {
    	
    	Posicion extremoInferiorDerecho = new Posicion(tamanio-1,tamanio-1);// Inicia en la posicion (0,0).
    	this.extremoInferiorDerecho = extremoInferiorDerecho;
    }
    
    public Posicion obtenerExtremoInferiorDerecho() {
    	
    	return this.extremoInferiorDerecho;
    }
    
	private boolean validarPosicion(Posicion posicion) { 
		
		return (( ! posicion.tieneUnaParteNegativa() ) && 
			    ( !( this.extremoInferiorDerecho.restarPosicion(posicion)).tieneUnaParteNegativa() )  );	
	}
	
	public boolean estaDentroDeLosLimitesDelMapaLaPosicion(Posicion unaPosicion) {
		
		return (this.validarPosicion(unaPosicion));
	}
    
}
